From: Florian Müllner Date: Fri, 2 Jun 2017 02:22:36 +0000 (+0200) Subject: appDisplay: Use ::paint handler to set up spring animation X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~212 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c67eabaf62665d7e89471a35111ff66c96322a4c;p=gnome-shell.git appDisplay: Use ::paint handler to set up spring animation The animation needs the icons' final positions, so we currently defer it to a ::notify::allocation handler; however as starting the animation during an allocation cycle would trigger a Clutter warning, it is further deferred to a MetaLater. While this usually works, it is possible that the allocation is already valid when we connect the signal, in which case the animation is triggered at a later unexpected time. Switch to a more robust ::paint handler instead, which also allows us to get rid of the double-delay. https://bugzilla.gnome.org/show_bug.cgi?id=736148 --- diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index fe36deded..1cb830372 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -219,17 +219,10 @@ var BaseAppView = new Lang.Class({ } if (animationDirection == IconGrid.AnimationDirection.IN) { - let toAnimate = this._grid.actor.connect('notify::allocation', Lang.bind(this, - function() { - this._grid.actor.disconnect(toAnimate); - // We need to hide the grid temporary to not flash it - // for a frame - this._grid.actor.opacity = 0; - Meta.later_add(Meta.LaterType.BEFORE_REDRAW, - Lang.bind(this, function() { - this._doSpringAnimation(animationDirection) - })); - })); + let id = this._grid.actor.connect('paint', () => { + this._grid.actor.disconnect(id); + this._doSpringAnimation(animationDirection); + }); } else { this._doSpringAnimation(animationDirection); }